//TODO 25/6/05

// 流程控制
// 面向过程编程
// 自上而下的执行（）
// 面向对象编程：让程序像人一样的思考来运行，而不是机械式的自上而下 （架构）
// 将世界抽象为一个个的对象，然后用程序来模拟这一个个的对象，然后进行一些人工化的操作实现

//现实世界的逻辑
//定义 （属性）
//判断 （对错，导向不同的结果）
//循环 （很多事情本质上都是在循环的） 时间（秒、时、分、日、月、年、周）
//程序代码底层的本质，也和上面相同，所有编程语言都有的

//定义 变量、常量
//需要在程序中进行一些判断，来做出一些不同的决定 if 如果…如果条件二else if…否则else…
//考分，90 + A 80 - 90 B 70-80 C 0-60 D …
//循环，我们希望程序不停的做一件事情 for 循环
//服务器，我们希望程序是一直执行
//大量计算，1 + … + 100000000
//顺序结构：自上而下运行
//选择结构：满足了某些条件才会执行

package main

import "fmt"

// if
func main1() {
	var num = 15
	// if 不满足则跳过该if里面的代码，程序不会执行
	if num > 100 {
		fmt.Println("num > 100")
	}
	if num > 10 {
		fmt.Println("num > 10")
	}
	fmt.Println("main end")

	// 成绩
	var score int = 90

	// 满足一个条件，则进入对应的处理代码
	if score == 100 {
		fmt.Println("满分")
	} else { // 不满足就进入else
		fmt.Println("不及格")
	}
}

/*
go语言的输入:
fmt.Scan(&变量名)
*/
// 命令行程序 go build xxx.go 生成可执行程序。
func main2() {

	// 练习：if的练习

	// 判断用户密码输入是否正确

	// 输入框 ： 接收用户的输入 （新知识）
	// 第一次判断
	// 输入框 ：请再次输入密码  接收用户的输入 （新知识）
	// 第二次判断
	// 如果两次都是对的，那么则登录成功

	//
	var num1 int
	var num2 int

	// 提示用户输入
	fmt.Printf("请输入密码 ： \n")
	// 接收用户的输入 （阻塞式等待... 直到用户输入之后才继续运行）最简单的人机交互
	// Scan()  &num1地址，
	fmt.Scan(&num1) // 等待你的输入，卡住... 如果你输入完毕，回车。输入内容就会赋值给num
	// 123456 模拟数据，未来是在数据库中查询出来的。根据用户查的
	if num1 == 123456 {
		fmt.Println("请再次输入密码: ")
		fmt.Scan(&num2)
		if num2 == 123456 {
			fmt.Println("登录成功")
		} else {
			fmt.Println("登录失败")
		}
	} else {
		fmt.Println("登录失败")
	}
}

// 多个条件的判断
func main() {

	// 分数
	var score int
	fmt.Println("请输入你的成绩：")
	fmt.Scan(&score)
	// 逻辑运算符应用   90<=score<=100 不能这样写的
	if score >= 90 && score <= 100 {
		fmt.Println("A")
	} else if score >= 80 && score < 90 {
		fmt.Println("B")
	} else if score >= 70 && score < 80 {
		fmt.Println("C")
	} else if score >= 60 && score < 70 {
		fmt.Println("D")
	} else if score < 0 || score > 100 { // 健壮性判断
		fmt.Println("输入不合法")
	} else { // else 如果以上的条件都不满足，则执行 else
		fmt.Println("不及格")
	}

}
